범주형 변수

AI
gemma-4-31b
작성자
익명
작성일
2026.07.14
조회수
9
버전
v2

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

범주형 변수

개요

범주형 변수(Categorical Variable)는 데이터 과학과 통계학에서 중요한 데이터 유형 중 하나로, 특정 범주나 그룹에 속하는 값을 가지는 변수를 의미합니다. 이 변수는 정량적인 수치가 아닌 정성적인 속성을 표현하며, 데이터 분석, 머신러닝 모델링, 데이터 시각화 등 다양한 과정에서 핵심적인 역할을 합니다. 예를 들어, 사람의 성별(남성, 여성), 혈액형(A형, B형, AB형, O형), 지역(서울, 부산, 대구 등)은 모두 범주형 변수의 예입니다.

범주형 변수는 데이터 준비 과정에서 적절한 처리가 필요하며, 대부분의 머신러닝 알고리즘이 수치 입력을 요구하기 때문에 인코딩(Encoding) 과정을 거쳐야 합니다. 이 문서에서는 범주형 변수의 정의, 유형, 전처리 방법, 그리고 분석 시 고려사항을 다룹니다.


범주형 변수의 유형

범주형 변수는 그 성격에 따라 두 가지 주요 하위 유형으로 나뉩니다:

1. 명목형 변수 (Nominal Variable)

  • 정의: 순서가 없는 범주로 구성된 변수.
  • 특징: 범주 간에 크기나 순서의 의미가 없음.
  • 예시:
  • 색상: 빨강, 파랑, 초록
  • 직업: 의사, 교사, 소방관
  • 결제 수단: 카드, 현금, 계좌이체

2. 순서형 변수 (Ordinal Variable)

  • 정의: 범주 간에 자연스러운 순서가 존재하는 변수.
  • 특징: 범주에 등급이나 순서가 있음. 예: "낮음 < 보통 < 높음"
  • 예시:
  • 만족도 평가: 불만족, 보통, 만족, 매우 만족
  • 학력: 고등학교, 전문대, 학사, 석사, 박사
  • 크기: S, M, L, XL

🔍 참고: 순서형 변수는 명목형 변수와 달리 순서 정보를 포함하므로, 인코딩 시 이 정보를 보존하는 것이 중요합니다.


데이터 준비에서의 처리 방법

머신러닝 모델은 일반적으로 수치 데이터만 처리할 수 있으므로, 범주형 변수는 전처리(Preprocessing) 과정을 통해 수치 형태로 변환되어야 합니다. 주요 방법은 다음과 같습니다.

1. 원-핫 인코딩 (One-Hot Encoding)

  • 설명: 각 범주를 독립적인 이진 변수(0 또는 1)로 변환.
  • 적용 대상: 주로 명목형 변수.
  • 장점: 범주 간에 인위적인 순서를 만들지 않음.
  • 단점: 범주 수가 많을 경우 차원이 급격히 증가(차원의 저주).

# 예시: pandas를 이용한 원-핫 인코딩
import pandas as pd

data = pd.DataFrame({'color': ['red', 'blue', 'green', 'red']})
encoded = pd.get_dummies(data, columns=['color'])

결과: | color_blue | color_green | color_red | |------------|-------------|-----------| | 0 | 0 | 1 | | 1 | 0 | 0 | | 0 | 1 | 0 | | 0 | 0 | 1 |

2. 레이블 인코딩 (Label Encoding)

  • 설명: 각 범주에 고유한 정수 값을 할당.
  • 적용 대상: 순서형 변수 또는 트리 기반 모델에서 사용.
  • 주의점: 명목형 변수에 사용 시 인위적인 순서를 암시할 수 있음.

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
data['color_encoded'] = le.fit_transform(data['color'])

3. 타깃 인코딩 (Target Encoding)

  • 설명: 범주별 종속 변수(Target)의 평균값으로 인코딩.
  • 적용 대상: 고차원 명목형 변수.
  • 장점: 정보 손실이 적고, 모델 성능 향상 가능.
  • 단점: 과적합(Overfitting) 위험 있음 → 교차 검증(CV) 기반 인코딩 권장.

고려사항 및 주의점

  • 고유값의 수(Cardinality): 범주 수가 너무 많으면(예: 우편번호), 인코딩 후 차원 폭발이 발생할 수 있음. 이 경우 범주 축소, 임베딩, 또는 해시 인코딩을 고려.
  • 결측치 처리: 범주형 변수에서도 NaN 값이 존재할 수 있으며, 이를 별도의 범주(예: "Unknown")로 처리하거나 삭제.
  • 데이터 균형: 특정 범주가 지나치게 많거나 적을 경우, 샘플링 기법이나 가중치 조정이 필요.
  • 정보 왜곡 방지: 레이블 인코딩은 순서형 변수에 적합하며, 명목형 변수에 무분별하게 적용하면 모델이 잘못된 패턴을 학습할 수 있음.

관련 기술 및 도구

기술/도구 설명
<a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D/pandas" class="wiki-link">pandas</a>.get_dummies() 원-핫 인코딩을 쉽게 수행
sklearn.preprocessing.LabelEncoder 레이블 인코딩 제공
category_encoders 라이브러리 타깃 인코딩, 베이즈 인코딩 등 고급 인코딩 기법 제공
<a href="/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4/scikit-learn" class="wiki-link">scikit-learn</a>OneHotEncoder 파이프라인 통합에 유리한 클래스 기반 인코더

변수 특성 비교: 수치형 vs 범주형

범주형 변수는 측정 가능한 양을 나타내는 수치형 변수(Numerical Variable)와 대비되는 개념입니다. 수치형 변수가 '얼마나 많은가(How much/many)'라는 양적 정보를 제공한다면, 범주형 변수는 '어떤 종류인가(Which kind)'라는 질적 정보를 제공합니다.

구분 수치형 변수 (Numerical) 범주형 변수 (Categorical)
핵심 질문 얼마나 많은가? (양적) 어떤 그룹인가? (질적)
연산 가능 여부 산술 연산(덧셈, 평균 등) 가능 산술 연산 불가능 (빈도수 계산만 가능)
예시 키, 몸무게, 가격, 온도 성별, 혈액형, 거주 지역, 등급
분석 지표 평균, 표준편차, 중앙값 최빈값, 비율, 빈도

다중공선성더미 변수 함정 해결법

원-핫 인코딩을 적용할 때, 생성된 모든 더미 변수를 모델에 입력하면 다중공선성(Multicollinearity) 문제가 발생할 수 있습니다. 이는 하나의 변수가 다른 변수들의 선형 조합으로 완벽하게 설명되는 상태를 말하며, 특히 선형 회귀 모델에서 계수 추정치의 불안정성을 초래합니다.

이를 더미 변수 함정(Dummy Variable Trap)이라고 하며, 해결 방법은 전체 범주 수($n$)에서 하나를 제외한 $n-1$개의 열만 생성하는 것입니다. 제외된 하나의 범주는 나머지 모든 변수가 0일 때로 자동 정의됩니다.

[더미 변수 함정 해결 예시] - 대상 변수: 성별 (남성, 여성) $\rightarrow$ 범주 수 $n=2$ - 해결책: $n-1 = 1$개의 열만 생성

원본 데이터 (성별) 원-핫 인코딩 (함정 발생) 더미 변수 처리 (함정 해결) 비고
남성 남성: 1, 여성: 0 남성: 1 남성=1 $\rightarrow$ 남성
여성 남성: 0, 여성: 1 남성: 0 남성=0 $\rightarrow$ 여성

수치형 변수의 구간화 (Binning)

수치형 변수를 특정 기준에 따라 나누어 범주형 변수로 변환하는 과정을 구간화(Binning) 또는 이산화(Discretization)라고 합니다. 이는 연속적인 수치 데이터의 노이즈를 줄이고, 모델이 특정 구간의 패턴을 더 잘 학습하게 하기 위해 사용됩니다.

구간 설정 방법

  1. 동일 너비 구간화 (Equal-width Binning):
  2. 전체 데이터 범위를 동일한 길이의 구간으로 나눕니다.
  3. 기준: $\text{구간 너비} = \frac{\max - \min}{\text{구간 수}}$
  4. 특징: 데이터 분포가 균등할 때 유리하지만, 이상치(Outlier)에 민감합니다.
  5. 동일 빈도 구간화 (Equal-frequency Binning):
  6. 각 구간에 들어가는 샘플의 수가 동일하도록 나눕니다. (분위수 기준)
  7. 기준: 4분위수(Quartile) 또는 10분위수(Decile) 적용.
  8. 특징: 데이터 분포가 편향되어 있을 때 유용하며, 이상치의 영향을 덜 받습니다.
  9. 도메인 지식 기반 구간화 (Custom Binning):
  10. 비즈니스 로직이나 전문가의 기준에 따라 임의로 구간을 설정합니다.
  11. 예: 나이 $\rightarrow$ [0-12: 어린이], [13-18: 청소년], [19-64: 성인], [65+: 노인]

범주형 변수의 통계적 분석 방법

범주형 변수 간의 관계를 분석하기 위해서는 평균이나 분산 대신 빈도와 비율을 기반으로 하는 통계 기법을 사용합니다.

1. 교차 분석 (Crosstabulation)

두 범주형 변수의 빈도를 표(Contingency Table) 형태로 나타내어 변수 간의 상관관계를 파악하는 방법입니다.

2. 카이제곱 검정 (Chi-squared Test)

두 범주형 변수가 서로 독립적인지, 아니면 유의미한 연관성이 있는지를 검정하는 방법입니다.

[카이제곱 검정 수식] $$\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i}$$ - $O_i$: 관측 빈도 (Observed frequency) - $E_i$: 기대 빈도 (Expected frequency) - 두 변수가 독립일 때 예상되는 빈도

검정 결과 계산된 $\chi^2$ 값이 임계치보다 크면 "두 변수 간에 유의미한 관계가 있다"고 판단합니다.

고차원 범주형 변수 처리 전략

범주(Category)의 개수가 너무 많은 고카디널리티(High Cardinality) 변수(예: 사용자 ID, 도시명, 상품 코드)는 원-핫 인코딩 시 메모리 부족과 모델 성능 저하를 유발합니다. 이를 해결하기 위한 전략은 다음과 같습니다.

1. 빈도수 기반 인코딩 (Frequency Encoding)

각 범주가 데이터셋에서 나타나는 빈도수나 비율로 대체하는 방법입니다. - 특징: 범주의 희소성을 모델에 전달할 수 있으며, 차원이 증가하지 않습니다. - 한계: 빈도수가 동일한 서로 다른 범주가 같은 값으로 매핑될 수 있습니다.

2. 엔티티 임베딩 (Entity Embedding)

범주형 변수를 저차원의 연속적인 벡터 공간으로 매핑하는 신경망 기반 기법입니다. - 특징: Word2Vec과 유사하게, 유사한 특성을 가진 범주들이 벡터 공간상에서 가깝게 위치하도록 학습됩니다. - 장점: 고차원 데이터를 효율적으로 압축하며, 범주 간의 잠재적인 관계(Semantic meaning)를 포착할 수 있어 딥러닝 모델에서 매우 강력한 성능을 보입니다.

참고 자료


범주형 변수는 데이터 준비 과정에서 세심한 처리가 필요한 요소입니다. 적절한 인코딩 전략을 선택하고, 변수의 성격(명목형/순서형)을 정확히 이해하는 것이 고품질의 데이터 분석과 모델 성능 향상의 핵심입니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?